salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

您所在的位置:网站首页 香橙派4 python salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

#salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation| 来源: 网络整理| 查看: 265

本篇参考:

此前讲过CPU limitation:salesforce零基础学习(一百零二)Limitation篇之 CPU Limit本篇说一下项目中也经常用到的 heap size limitation以及best practice.

首先先说一下 salesforce中的 heap size简单概念, salesforce中的heap size和java中的heap size概念基本相同,当对象或者变量创建时,就会给分配内存,当运行时基于逻辑动态分配内存。salesforce限制同步最大的 apex heap size是6MB,异步的场景最多的是12MB. 当transaction执行时,太多数据存储在内存中的情况下,可能触发 The “Apex heap size too large” 的错误。

如果去调查某一个功能逻辑的heap size情况,可以通过以下的步骤来分析:

通过debug log查看当前的 heap size情况。 在debug log中通过HEAP_ALLOCATE来确定对象或者变量的分配内存的情况。 通过最后的Maximum heap size: 了解当前的执行的transaction所使用的heap size情况。 针对heap size limit拥有两个方法可以查询:

Best practice1. 不使用class级别的变量去存储大量数据(也不一定局限于 class级别的变量,list尽量别存储大量数据)错误案例: 下面的demo中: baseList,SampleMap的value以及tempt list都指向了同一个内存地址,执行以后,这个内存地址便会超限,从而触发The “Apex heap size too large” 的limitation

简单的改动就是声明一个新的 list,避免之前的内存倍速增长。

使用SOQL for loop从大量查询的数据中迭代和处理数据,官方也介绍了很多的 SOQL for loop的demo。详情可查看:

针对 heap size修改的情况下,官方给出的建议,此种情况下,每200条执行一次数据,大量的减少了 heap size的使用。

_SOQL for loop通过调用SOAP API的query和queryMore方法,使用高效的分块来检索所有sObjects(每次处理200条数据)。开发人员可以通过使用SOQL for loop处理返回多条记录的查询结果来避免堆大小的限制。_

当然,在多租户环境下,我们的limitation也不止 heap size,上述方法是否是最优解需要具体情况具体分析。当我们使用 SOQL for loop并且数据量大的情况下,这种方法可能会导致使用更多的CPU周期,逻辑执行时间也变得多了。除了官方上面的链接介绍以外,也可以看一下下面的邱老板的demo

在运行时环境下,通过在迭代list / set / map时从集合中移除不必要的item来减小堆大小。

此外,还使用了几个优化点作为参考:

[En]

In addition, a few optimization points are used as a reference:

1. 避免使用无效的临时变量。比如代码中的临时变量后续没有调用,造成了额外的花销,这种没有用的代码尽量删除。2. 更短的命名以及Field api 名称: 诚然使用好的命名规范有更强的可读性,不过短的名字确实可以省一些 heap size移除不必要的debug log语句,特别是生产环境。

总结:heap size和CPU limitation的优化相辅相成,不要为了某一个优化而特意放弃另外一个,彼此形成一下平衡。篇中有错误地方欢迎指出,有不懂欢迎留言。

Original: https://www.cnblogs.com/zero-zyq/p/16876033.htmlAuthor: zero.zhangTitle: salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

相关阅读 Title: python的scrapy爬虫模块间进行传参_Python爬虫第八天:ScrapyShell|yield item和请求传参…

内容简述:

一:Scrapy Shell

二:yield item和请求

三:请求传参-高级请求

一:Scrapy Shell

运行在终端的工具,用来调试scrapy。可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式。

简单使用—糗事百科

【温馨提示】:当咱们有时加载https请求时,有可能会报错

问题描述:[]

解决方案:

第一步: scrapy shell -s USER_AGENT=’Mozilla/5.0′

第二步:fetch(‘url’)

示例参考: fetch(“https://www.qiushibaike.com”)

A-response对象

属性

text:字符串格式的html body:二进制格式的html encoding:响应编码

url:所请求的url status:响应状态码 headers:响应头

方法:

xpath():据xpath获取所有selector对象(scrapy内部封装的一个类的对象)的列表

例:获取糗事百科用户名

name_list=response.xpath(‘//div[@class=”author clearfix”]//img/@alt’)

print(len(name_list)) print(name_list.extract())

print(name_list.extract()[0]) print(name_list.extract_first())

css():获取符合要求的所有selector对象的列表

获取内容

name_list=response.css(‘#content-left a > h2::text’)接着extract()

获取属性

css_list=response.css(‘#content-left a > img::attr(src)’)接着extract()

一般不使用,因为中间scrapy会将这个选择器给翻译成xpath再去解析

selector对象

xpath(‘./’):从当前节点向下开始查找

css():和上面的response的方式一样

extract():将对象转化为unicode字符串

extract_first():如果xpath获取不到内容extract_first()返回None,extract()报错

B-Item对象

类字典对象,用法和字典一样,将这个对象转化为字典 stu = dict(stu)

salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

二:yield item和请求

管道后处理:数据存储|下载

[En]

Post-processing of pipeline: data storage | download

【温馨提示】写好pipeline的时候,需要在settings文件中打开一个配置

ITEM_PIPELINES = { ‘huaproject.pipelines.HuaprojectPipeline’:300, }

第一个:处理的管道

第二:优先级,优先级越小,优先级越高(0-1000)

[En]

Second: priority, the smaller the priority, the higher the priority (0-1000)

多页抓取和批量下载图片

[En]

Multi-page crawl and batch download of pictures

url规律

第一页list-1-0.html

第二页list-1-1.html

第n页list-1-(n-1).html

三:请求传参【高级请求】

如果一个页面不能将一个item的所有信息全部拿到,需要再次发送请求,再次解析才能将item的所有信息拿到。这种情况怎么办?

Original: https://blog.csdn.net/weixin_42549154/article/details/113673363Author: 雪中阳Title: python的scrapy爬虫模块间进行传参_Python爬虫第八天:ScrapyShell|yield item和请求传参…

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/360432/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3